package 静态代理;/*
 *author Administrator
 *date 2021年6月2日
 */

/*
* 静态代理
* 真实对象和代理对象都要实现同一个接口
* class You implements Marry 真实对象
* class WeddingCompany implements Marry  代理对象
*
* 代理对象要代理真实角色
* WeddingCompany company = new WeddingCompany(new You());
*
*
*
*
*
* */
public class staticProxyDemo {

    public static void main(String[] args) {


        // 其实线程也是一个静态代理
        // ()-> System.out.println("hello world") 真实对象
        // new Thread 实现了Runnable 接口 （相当于代理对象）
        new Thread(()-> System.out.println("hello world")).start();


        // 普通写法
        new WeddingCompany(new You()).HappyMarry();


        //lambda写法 其实就是吧 new You()里面要实现的HappyMarry()给拿过来
        // 从()开始赋值到{}  中间加个-> 就好了。。
        new WeddingCompany(()-> {System.out.println("结婚超开心！");}).HappyMarry();
    }

}

interface Marry {
    void HappyMarry();
}

// 真实角色
class You implements Marry{

    @Override
    public void HappyMarry() {
        System.out.println("结婚超开心！");
    }
}

// 代理角色
class WeddingCompany implements Marry {
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    @Override
    public void HappyMarry() {
        before();
        this.target.HappyMarry();
        after();
    }

    private void after() {
        System.out.println("结婚之后--收尾款");
    }

    private void before() {
        System.out.println("结婚之前--布置现场");
    }
}